package design.adapter;

/**
 * <p>
 * media adapter
 * 分为三种适配模式（目标对象的传入适配器方式不一样）：
 *      类适配： 通过继承目标对象，从而获取到对应的方法属性进行使用
 *      接口适配： 将目标通过类构造器出入适配器
 *      对象适配：  将目标对象通过类构造器传入适配器
 * </P>
 *
 * @author dingwen
 * @date 2021.10.15 16:06
 */
@SuppressWarnings("all")
public class MediaAdapter implements MediaPlayer {
    private AdvancedMediaPlayer advancedMediaPlayer;

    public MediaAdapter(String audioType) {
        this.advancedMediaPlayer = audioTypeHandler(audioType);
    }

    /**
     * 玩
     *
     * @param audioType 音频类型
     * @param fileName  文件名称
     */
    @Override
    public void play(String audioType, String fileName) {
        audioTypeHandler(audioType, fileName);
    }

    /**
     * 音频类型处理程序
     *
     * @param audioType 音频类型
     * @return {@link AdvancedMediaPlayer}
     */
    public AdvancedMediaPlayer audioTypeHandler(String audioType) {
        if ("vlc".equalsIgnoreCase(audioType)) {
            return new VlcPlayer();
        } else if ("mp4".equalsIgnoreCase(audioType)) {
            return new Mp4Player();
        }
        return null;
    }

    /**
     * 音频类型处理程序
     *
     * @param audioType 音频类型
     * @param fileName  文件名称
     */
    public void audioTypeHandler(String audioType, String fileName) {
        if ("vlc".equalsIgnoreCase(audioType)) {
            advancedMediaPlayer.playVlc(fileName);
        } else if ("mp4".equalsIgnoreCase(audioType)) {
            advancedMediaPlayer.playMp4(fileName);
        }
    }


}
